<?php
/**
 * Created by JetBrains PhpStorm.
 * User: Андрей
 * Date: 19.05.12
 * Time: 14:26
 * To change this template use File | Settings | File Templates.
 */


    /*
     * Класс маршрутизатор для вызов контроллеров
     */

    class Router
    {
        private $_route; // маршурт
        private $_routes; // маршруты
        
        public function __construct()
        {
            // маршрут после редиректа
            $this->_route = empty($_GET['route']) ? 'index/' : $_GET['route'];
            // возможные маршруты
            $this->_routes = array(
                'index/' => 'Index',

                'users/([a-zA-Z0-9])' => 'UserProfile/userPage/$1',
                'users/' => 'UserProfile',

                'logout/' => 'UserProfile/logout',

                'note/add' => 'Note/addNote',
                'note/edit/([0-9])' => 'Note/editNote/$1',
                'note/remove/([0-9])' => 'Note/removeNote/$1',

                'comment/add/([0-9])' => 'Comment/addComment/$1',
                'comment/remove/([0-9])' => 'Comment/removeComment/$1',

                'auth/enter' => 'Authorization/enter',
                'auth/' => 'Authorization',

                'reg/enter' => 'Registration/enter',
                'reg/' => 'Registration',

                'settings/save' => 'Settings/save',
                'settings/' => 'Settings'
                
            );
        }

        // запустить маршрут
        public function getRoute()
        {
            // проход по возможным путям
            foreach($this->_routes as $pattern => $route)
            {
                // если подходит путь
                if( preg_match("~$pattern~", $this->_route) )
                {
                    // получить "правильный" маршрут add -> addNote
                    $route = preg_replace("~$pattern~", $route, $this->_route);

                    // разбитый путь
                    $chunks = explode('/', $route);

                    // контроллером является первое слово
                    $controller = array_shift($chunks);

                    // действием второе
                    $action = array_shift($chunks);

                    // ну и параметры оставшиеся
                    $args = $chunks;
                    
                    return array(
                        'controller' => $controller,
                        'action' => $action,
                        'args' => $args
                    );
                }
            }
            
            return null;
        }
        
    }
